package com.bjsxt.base.sync_shuoGG;

import java.text.SimpleDateFormat;
import java.util.Date;

/*
该例子可以说明锁住的是对象: A线程test1运行期间, B线程无法运行test2

                    翻译: A线程拿到了StaticUtil.class这个锁(通行证只有1个), B线程没有通信证, 得等A用完了才行, 同时
                          又因为StaticUtil.class这个锁同时把test1和test2锁住了, 所以B无法访问test1和test2, 同样的,
                          A此时即可以访问test1又可以访问test2, 拿到锁就是可以为所欲为(此特性叫可重入)

                    注意: 拿到锁这个动作的主语是线程 (其实觉得拿到锁改成拿到钥匙更加贴切些)
输出结果:
    Thread-0 ThreadStatic2 14:58:47
    main UseLock StaticUtil.test2 14:58:47
    main ReleaseLock StaticUtil.test2 14:58:50
    Thread-0 UseLock StaticUtil.test1 14:58:50
    Thread-0 ReleaseLock StaticUtil.test1 14:58:55
*/
public class ThreadStatic2 extends Thread {

    @Override
    public void run() {
        System.out.println(currentThread().getName() + " ThreadStatic2 " + new SimpleDateFormat("HH:mm:ss").format(new Date()));
        StaticUtil.test1();
    }

    public static void main(String[] args) {
        new ThreadStatic2().start();
        StaticUtil.test2();
    }
}
